package com.mine.modules.vm.common.utils;

import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mine.common.utils.ArtemisUtil;

public class MonitorUtil {
	/**
	 * 能力开放平台的网站路径
	 * 路径不用修改，就是/artemis
	 */
	private static final String ARTEMIS_PATH = "/artemis";
	
	/**
	 * 分页获取区域列表
	 * pageNo:范围 ( 0 , ~ )，若是范围内数字超过实际最大页码值，返回最后一页记录 注：0 < pageNo
	 * pageSize:范围 ( 0 , 1000 ] 注：0 < pageSize≤1000
	 * @param params
	 * @return
	 */
	@SuppressWarnings("serial")
	public static String regions(Map<String,Object> params){
		String alarmsDataApi = ARTEMIS_PATH +"/api/resource/v1/regions";
		Map<String,String> path = new HashMap<String,String>(2){
			{
				put("https://",alarmsDataApi);
			}
		};
		String body=JSON.toJSONString(params);
		String result = ArtemisUtil.doPostStringArtemis(path,body,null,null,"application/json");
		return result;
	}
	
	/**
	 * 分页获取监控点资源
	 * pageNo:范围 ( 0 , ~ )，若是范围内数字超过实际最大页码值，返回最后一页记录 注：0 < pageNo
	 * pageSize:范围 ( 0 , 1000 ] 注：0 < pageSize≤1000
	 * treeCode:树编号。综合安防平台当前未使用该字段。该字段预留。
	 * @param params
	 * @return
	 */
	@SuppressWarnings("serial")
	public static String cameras(Map<String,Object> params){
		String alarmsDataApi = ARTEMIS_PATH +"/api/resource/v1/cameras";
		Map<String,String> path = new HashMap<String,String>(2){
			{
				put("https://",alarmsDataApi);
			}
		};
		String body=JSON.toJSONString(params);
		String result =ArtemisUtil.doPostStringArtemis(path,body,null,null,"application/json");
		return result;
	}
	
	/**
	 * 根据区域编号获取下级监控点列表
	 * pageNo:范围 ( 0 , ~ )，若是范围内数字超过实际最大页码值，返回最后一页记录 注：0 < pageNo
	 * pageSize:范围 ( 0 , 1000 ] 注：0 < pageSize≤1000
	 * regionIndexCode:区域编号唯一标识 最大长度64
	 * @param params
	 * @return
	 */
	@SuppressWarnings("serial")
	public static String camerasByRegionIndexCode(Map<String,Object> params){
		String alarmsDataApi = ARTEMIS_PATH +"/api/resource/v1/regions/regionIndexCode/cameras";
		Map<String,String> path = new HashMap<String,String>(2){
			{
				put("https://",alarmsDataApi);
			}
		};
		String body=JSON.toJSONString(params);
		String result =ArtemisUtil.doPostStringArtemis(path,body,null,null,"application/json");
		return result;
	}
	
	/**
	 * 获取监控点预览取流URLv2
	 * cameraIndexCode:监控点唯一标识,参数必填;
	 * streamType:码流类型，0:主码流 1:子码流 2:第三码流 参数不填，默认为主码流
	 * protocol:取流协议（应用层协议），“hik”:HIK私有协议，使用视频SDK进行播放时，传入此类型；“rtsp”:RTSP协议；“rtmp”:RTMP协议；
	 *          “hls”:HLS协议（HLS协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备；只支持H264视频编码和AAC音频编码）。参数不填，默认为HIK协议
	 * transmode:传输协议（传输层协议），0:UDP 1:TCP 默认是TCP 注： GB28181 2011及以前版本只支持UDP传输
	 * expand:标识扩展内容，格式：key=value， 调用方根据其播放控件支持的解码格式选择相应的封装类型； 支持的内容详见[附录F expand扩展内容说明]@[企业安全生产管理平台V1.7.300-附录-附录F expand扩展内容说明]
	 * streamform:输出码流转封装格式，“ps”:PS封装格式、“rtp”:RTP封装协议。当protocol=rtsp时生效，且不传值时默认为RTP封装协议。
	 * @param params
	 * @return
	 */
	@SuppressWarnings("serial")
	public static String previewURLs(Map<String,Object> params){
		String alarmsDataApi = ARTEMIS_PATH +"/api/video/v2/cameras/previewURLs";
		Map<String,String> path = new HashMap<String,String>(2){
			{
				put("https://",alarmsDataApi);
			}
		};
		String body=JSON.toJSONString(params);
		String result =ArtemisUtil.doPostStringArtemis(path,body,null,null,"application/json");
		return result;
	}
	
	/**
	 * 分页获取监控点资源
	 * pageNo:范围 ( 0 , ~ )，若是范围内数字超过实际最大页码值，返回最后一页记录 注：0 < pageNo
	 * pageSize:范围 ( 0 , 1000 ] 注：0 < pageSize≤1000
	 * regionId:区域编号。
	 * includeSubNode:是否包含下级，1包含，0不包含（若regionId为空，则该参数不起作用）
	 * indexCodes:监控点编码集，最大500，
	 * status:状态，1-在线，0-离线，-1-未检测
	 * @param params
	 * @return
	 */
	@SuppressWarnings("serial")
	public static String cameraOnline(Map<String,Object> params){
		String alarmsDataApi = ARTEMIS_PATH +"/api/nms/v1/online/camera/get";
		Map<String,String> path = new HashMap<String,String>(2){
			{
				put("https://",alarmsDataApi);
			}
		};
		String body=JSON.toJSONString(params);
		String result =ArtemisUtil.doPostStringArtemis(path,body,null,null,"application/json");
		return result;
	}
	
	public static void main(String[] args) throws Exception {
		/*
		 * Map<String,String> params = new HashMap<String,String>();
		 * params.put("cameraIndexCode", "53340100581314001737");
		 * params.put("streamType", "0"); params.put("protocol", "rtsp");
		 * params.put("transmode", "1"); params.put("expand", "");
		 * params.put("streamform", "");
		 */
		Map<String,Object> params = new HashMap<String,Object>();
		params.put("pageNo", "1");
		params.put("pageSize", "1000");
		JSONObject object = JSONObject.parseObject(regions(params));
		System.out.println(object);
	}

}
